package com.example.demo.component;

import com.example.demo.common.ArtTimeUtil;
import com.example.demo.entity.Time;
import org.springframework.stereotype.Component;

import java.time.Duration;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Created with IntelliJ IDEA.
 * Description: 博客定时发布线程池
 */
@Component
public class ArtThreadPoolExecutor {
    // 创建线程池，固定设置三个线程
    public static final ScheduledExecutorService executors
            = new ScheduledThreadPoolExecutor(3);

    // 向线程池中传任务
    public void put(Runnable runnable, Time time) {
        // 根据用户传过来的时间计算剩余时间
        Duration duration = ArtTimeUtil.getTimeToDuration(time);
        // 将任务以及剩余时间放到线程池
        /**
         * runnable：表示需要执行的任务
         * duration.toMillis() 可以获取到 规定时间与当前时间之间相差的毫秒数
         * 由于 TimeUnit 没有毫秒的设置，因此我们将毫秒 / 1000
         * TimeUnit.SECONDS 表示我们第二个参数的时间单位
         */
        executors.schedule(runnable, duration.toMillis() / 1000, TimeUnit.SECONDS);
    }
}

